Hibernate Validator হল Hibernate ফ্রেমওয়ার্কের একটি অংশ যা Bean Validation স্পেসিফিকেশন (JSR 303/JSR 380) অনুসরণ করে। এটি Java অ্যাপ্লিকেশনের ডেটা বৈধতা নিশ্চিত করার জন্য ব্যবহৃত হয়, যাতে আপনার ডোমেইন অবজেক্টগুলি সঠিক এবং স্বচ্ছভাবে কাজ করতে পারে। Hibernate Validator JavaBeans এর প্রোপার্টির মান যাচাই করার জন্য constraint annotations প্রদান করে, যেমন @NotNull, @Size, @Min, @Max, @Email, এবং আরও অনেকগুলি।
Hibernate Validator একটি খুব কার্যকরী টুল যা validation logic সরল করে তোলে এবং এটি বিভিন্ন প্রকারের ডেটার জন্য ডেটা ইন্টেগ্রিটি নিশ্চিত করে। Hibernate Validator-কে আপনার প্রোজেক্টে ব্যবহার করলে, আপনি আপনার ডেটার বৈধতা পরীক্ষা এবং কাস্টম validation rules যুক্ত করতে পারেন।
Hibernate Validator - প্রাথমিক ধারণা
Hibernate Validator আপনাকে annotations ব্যবহার করে অবজেক্টগুলির বৈধতা যাচাই করতে দেয়। এগুলি সাধারণত JavaBean properties বা DTO (Data Transfer Object) ক্লাসগুলির ক্ষেত্রের উপর প্রয়োগ করা হয়।
Hibernate Validator ডেটা মডেল ক্লাসে বা API স্তরে আপনার ডেটার সাথে সম্পর্কিত validation constraints সংজ্ঞায়িত করতে সাহায্য করে, যা server-side validation নিশ্চিত করে।
Hibernate Validator এর সুবিধা:
- Declarative Validation: Validation কনস্ট্রেইন্টগুলি annotations দ্বারা ডেক্লেয়ার করা হয়, যা কোডের পঠনযোগ্যতা এবং রক্ষণাবেক্ষণ সহজ করে।
- Integrates with Spring: Spring Framework এর সাথে Hibernate Validator সহজেই ইন্টিগ্রেট করা যায় এবং অটোমেটিকালিভাবে Bean Validation ফিচার ব্যবহার করা যায়।
- Custom Validation: Hibernate Validator কাস্টম validation রুলস তৈরি করতে সাহায্য করে, যা আপনার অ্যাপ্লিকেশনের বিশেষ চাহিদার জন্য উপযুক্ত।
Hibernate Validator - প্রাথমিক ব্যবহারের উদাহরণ
ধরা যাক, আমাদের একটি Employee ক্লাস রয়েছে এবং আমরা এই ক্লাসের বিভিন্ন প্রপার্টির উপর constraint annotations প্রয়োগ করতে চাই।
Step 1: Maven Dependency
Hibernate Validator ব্যবহার করতে হলে আপনাকে Maven প্রকল্পে এটি যুক্ত করতে হবে। Hibernate Validator JSR-303 এর উপর ভিত্তি করে তৈরি, এবং এটি Maven দ্বারা ইন্সটল করা যায়।
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
Step 2: Employee Class with Annotations
এখন, একটি Employee ক্লাস তৈরি করা হবে এবং এতে কিছু সাধারণ validation constraints প্রয়োগ করা হবে।
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Min;
import javax.validation.constraints.Email;
public class Employee {
@NotNull(message = "Name cannot be null")
@Size(min = 2, max = 100, message = "Name must be between 2 and 100 characters")
private String name;
@Min(value = 1, message = "Salary must be greater than or equal to 1")
private double salary;
@Email(message = "Email should be valid")
private String email;
// Getters and Setters
}
এখানে:
@NotNull: এটি নিশ্চিত করে যেnameফিল্ডটি null নয়।@Size: এটিnameফিল্ডের দৈর্ঘ্য ২ থেকে ১০০ অক্ষরের মধ্যে থাকতে হবে।@Min: এটি নিশ্চিত করে যেsalaryফিল্ডের মান ১ এর কম হবে না।@Email: এটি নিশ্চিত করে যেemailফিল্ডটি একটি বৈধ ইমেইল ঠিকানা হবে।
Step 3: Validator Setup
Hibernate Validator ব্যবহার করার জন্য একটি Validator অবজেক্ট তৈরি করতে হবে, যা আপনার Employee ক্লাসের বৈধতা পরীক্ষা করবে।
import org.hibernate.validator.HibernateValidator;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.ConstraintViolation;
import java.util.Set;
public class ValidatorExample {
public static void main(String[] args) {
// Step 1: Create a ValidatorFactory
ValidatorFactory factory = Validation.byProvider(HibernateValidator.class)
.configure()
.buildValidatorFactory();
// Step 2: Create Validator
Validator validator = factory.getValidator();
// Step 3: Create Employee instance
Employee employee = new Employee();
employee.setName("J");
employee.setSalary(0);
employee.setEmail("invalidEmail");
// Step 4: Validate Employee object
Set<ConstraintViolation<Employee>> violations = validator.validate(employee);
// Step 5: Print validation results
for (ConstraintViolation<Employee> violation : violations) {
System.out.println(violation.getMessage());
}
}
}
Explanation of Code:
- ValidatorFactory: প্রথমে
ValidatorFactoryতৈরি করা হয়। - Validator:
Validatorঅবজেক্ট ব্যবহার করে ডেটা যাচাই করা হয়। - Employee Object: Employee অবজেক্ট তৈরি করা হয় এবং এতে কিছু ভুল মান রাখা হয় (যেমন, নাম খুব ছোট, স্যালারি ০, ইমেইল ভুল)।
- Validation:
validator.validate(employee)ব্যবহার করে ডেটার বৈধতা যাচাই করা হয়। - Violation Messages: যদি কোনো constraint violation ঘটে, তবে
violationsসেটের মধ্যে সমস্ত ত্রুটি বার্তা থাকবে, যা আপনি কনসোলে দেখতে পাবেন।
Sample Output:
Name must be between 2 and 100 characters
Salary must be greater than or equal to 1
Email should be valid
Custom Validation Constraints
Hibernate Validator আপনাকে custom validation constraints তৈরি করার সুযোগ দেয়। আপনি annotation তৈরি করে এবং তাদের মধ্যে logic সংজ্ঞায়িত করে কাস্টম ভ্যালিডেটর তৈরি করতে পারেন।
Example: Custom Validator
ধরা যাক আমরা একটি কাস্টম ভ্যালিডেশন তৈরি করতে চাই যা সুনির্দিষ্ট একটি নামের ফরম্যাট পরীক্ষা করবে। যেমন, নামের প্রথম অক্ষরটি বড় হতে হবে।
Custom Annotation
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Constraint(validatedBy = NameValidator.class)
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidName {
String message() default "Name must start with an uppercase letter";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Validator Class
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class NameValidator implements ConstraintValidator<ValidName, String> {
@Override
public void initialize(ValidName constraintAnnotation) {}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null || value.isEmpty()) {
return true;
}
return Character.isUpperCase(value.charAt(0));
}
}
Using Custom Validator
public class Employee {
@ValidName
private String name;
// Getters, Setters, Constructors
}
এখানে, @ValidName অ্যানোটেশনটি name ফিল্ডে প্রয়োগ করা হয়েছে, এবং NameValidator ক্লাসটি এটি যাচাই করবে যে নামের প্রথম অক্ষরটি বড় হাতের হতে হবে।
Hibernate Validator একটি শক্তিশালী টুল যা JavaBeans এবং ডেটা ট্রান্সফার অবজেক্টের জন্য validation সরল করে তোলে। এটি JSR 303/JSR 380 স্পেসিফিকেশন অনুসরণ করে এবং আপনাকে annotations ব্যবহার করে সহজে ডেটার বৈধতা পরীক্ষা করতে সহায়ক। Hibernate Validator আপনাকে predefined validation constraints যেমন @NotNull, @Email, @Size ইত্যাদি ব্যবহার করতে দেয়, এবং আপনি চাইলে custom validation তৈরি করারও সুযোগ পাবেন। এটি server-side validation নিশ্চিত করার জন্য অত্যন্ত উপযোগী এবং ডেটার integrity বজায় রাখতে সহায়ক।
Read more